/**
 *
 * @description: 工具包
 * @author: junyong.hong
 * @createTime: 2019/11/1
 * @version: 1.0.0.0
 * @history:
 *    1、
 *    2、
 *
 */
let createHash = require('create-hash')

module.exports = {
    /**
     * 对请求结果统一封装处理
     * @param err
     * @param response
     * @param body
     * @returns {*|{code: number, data: string, message: string}}
     */
    handleResponse(err, response, body) {
        // response.statusCode请求网络状态码
        if (!err && response.statusCode === 200) {
            let data = JSON.parse(body)

            if (data && !data.errcode) {
                return this.handleSuc(data)
            } else {
                return this.handleFail(data.errmsg, data.errcode)
            }
        } else {
            // 10009请求失败
            return this.handleFail(err, 10009)
        }
    },
    /**
     * 成功返回的数据格式
     * @param data
     * @returns {{code: number, data: string, message: string}}
     */
    handleSuc(data = '') {
        return {
            code: 0,
            data: data,
            message: ''
        }
    },
    /**
     * 失败返回的数据格式
     * @param message
     * @param code
     * @returns {{code: number, data: string, message: string}}
     */
    handleFail(message = '', code = 10001) {
        return {
            code: code,
            data: '',
            message: message
        }
    },
    /**
     * 生成随机数
     */
    createNonceStr() {
        return Math.random().toString(36).substr(2, 15)
    },
    /**
     * 生成签名
     * @param params
     * @param key
     * @returns {string}
     */
    getSign(params, key) {
        let string = this.raw(params) + '&key=' + key
        let sign = createHash('md5').update(string).digest('hex')
        return sign.toUpperCase()
    },
    /**
     * 生成系统的交易订单号
     * @param type
     */
    getTradeId(type = 'wx') {
        let date = new Date().getTime().toString()
        let text = ''
        let possible = '0123456789'
        for (let i = 0; i < 5; i++) {
            text += possible.charAt(Math.floor(Math.random() * possible.length))
        }
        return (type == 'wx' ? 'ImoocWxJuZi' : 'ImoocMpJuZi') + date + text
    },
    /**
     * 生成时间戳
     */
    createTimeStamp() {
        return parseInt(new Date().getTime() / 1000) + ''
    },
    /**
     * Object转换成json（地址栏格式）并排序
     * @param args
     * @returns {string}
     */
    raw(args) {
        // 获取key值，再按字母排序
        // var b = {c:1, b:2, d:5} 输出：["b", "c", "d"]
        let keys = Object.keys(args).sort()

        // {b: 2, c: 1, d: 5}
        let obj = {}
        keys.forEach((key) => {
            obj[key] = args[key]
        })

        // 将对象转换成&分割的参数 {a:1,b:2} => a=1&b=2
        let val = ''
        for (let k in obj) {
            val += '&' + k + '=' + obj[k]
        }
        // 把最前面的&截取掉
        return val.substr(1)
    }
}